package me.mingshan.leetcode;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 414. 第三大的数
 * https://leetcode.cn/problems/third-maximum-number/description/
 *
 * 给你一个非空数组，返回此数组中 第三大的数 。如果不存在，则返回数组中最大的数。
 *
 *
 *
 * 示例 1：
 *
 * 输入：[3, 2, 1]
 * 输出：1
 * 解释：第三大的数是 1 。
 * 示例 2：
 *
 * 输入：[1, 2]
 * 输出：2
 * 解释：第三大的数不存在, 所以返回最大的数 2 。
 * 示例 3：
 *
 * 输入：[2, 2, 3, 1]
 * 输出：1
 * 解释：注意，要求返回第三大的数，是指在所有不同数字中排第三大的数。
 * 此例中存在两个值为 2 的数，它们都排第二。在所有不同数字中排第三大的数为 1 。
 *
 * @author hanjuntao
 * @date 2025/7/3 0003
 */
public class L_414_third_maximum_number {

    public static void main(String[] args) {
        int[] nums = {1,1,2};
        System.out.println(thirdMax(nums));
    }

    private static int thirdMax(int[] nums) {
        if (nums == null || nums.length == 0) {
            return -1;
        }

        if (nums.length == 1) {
            return nums[0];
        }

        if (nums.length == 2) {
            return Math.max(nums[0], nums[1]);
        }

        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
        }

        List<Integer> list = set.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

        if (list.size() < 3) {
            return list.get(0);
        }

        int count = 0;
        for (Integer integer : list) {
            if (count == 2) {
                return integer;
            }
            count++;
        }

        return -1;
    }
}
